package lk.icta.core.service;


import lk.icta.core.entity.AlienationRailway;
import lk.icta.core.entity.LandRailway;
import lk.icta.user.entity.User;

import java.util.Date;
import java.util.List;

public interface LandRailwayManagementService {


    /**
     * Add an Un-Alienated land
     *
     * @param land Land to be added
     * @param user User requesting to add land
     */
    public void addLand(LandRailway land, AlienationRailway alienationRailway, User user, String language);

    LandRailway getLandByIdUKey(long landId, User user);

    /**
     * Approve land information
     *
     * @param land Land to be approved
     * @param user The user approving the land information
     */
    public void approveLandInformation(LandRailway land, String approvalComment, User user);

    public void rejectLandInformation(LandRailway land, String approvalComment, User user);

    void updateLand(LandRailway land, AlienationRailway alienation, User user, String language);

    /**
     * Returns a landRailway on given search criteria
     *
     * @param fileNo     File no
     * @param planNo     Plan no
     * @param lotNo      Plan no
     * @param holderName Holder Name
     * @param user       User requesting to search the land
     * @param pageNo     page number for pagination
     * @return The land corresponding to the given id
     */
    public List<LandRailway> searchDetailedLandsOfDSDivisionBySearchText(String fileNo, String planNo, String lotNo, String holderName, User user, int pageNo);

    public List<Object[]> getLandStats(int id, String searchBy, LandRailway.State landState, Date fromDate, Date toDate, LandRailway.MigrationState migState);

    public List<LandRailway> getLandStatisticsReportData(int branchId, int trackId, int districtId, Date fromDate, Date toDate, int lState);

    public List<LandRailway> getDetailedLandList(int branchId, int railwayTrackId, int districtId, String startingDate, String endingDate, int lState, User user, String language);

    public List<LandRailway> getLandAvailableLikeFileNo(String landFileNumber, User user);
}
